package 根据二叉树创建字符串;
import 相同的树.TreeNode;
class Solution {
    public String tree2str1(TreeNode root) {
        if (root == null){
            return "()";
        }
        StringBuilder str = new StringBuilder();
        str.append(root.val);
        String strleft = tree2str1(root.left);
        String strright = tree2str1(root.right);
        if (strleft.equals("()") && strright.equals("()")){
            return str.toString();
        }
        if (!strleft.equals("()") && strright.equals("()")){
            str.append("(");
            str.append(strleft);
            str.append(")");
            return str.toString();
        }
        if (strleft.equals("()") && !strright.equals("()")){
            str.append(strleft);
            str.append("(");
            str.append(strright);
            str.append(")");
            return str.toString();
        }
        str.append("(");
        str.append(strleft);
        str.append(")");
        str.append("(");
        str.append(strright);
        str.append(")");
        return str.toString();
    }
    //返回以前序遍历构建的字符串
    public String tree2str(TreeNode root) {
        StringBuilder tmp = new StringBuilder();
        tree2strChild(root,tmp);
        //StringBuilder转String用toString()方法
        return tmp.toString();
    }
    //将每棵子树构建的字符串都拼接到tmp中,拼接方法append()
    private void tree2strChild(TreeNode root, StringBuilder tmp) {
        //当前树是空树,直接返回不进行拼接
        if (root == null){
            return;
        }
        //将root的val拼接到tmp中
        tmp.append(root.val);
        if (root.left != null){
            //左子树不为空,进行递归拼接
            tmp.append("(");
            tree2strChild(root.left,tmp);
            tmp.append(")");
        }else {
            if (root.right != null){
                //左子树为空,右子树不为空,根据要求,()不能省略
                tmp.append("()");
            }else {
                //左右子树都为空,不继续进行拼接,直接返回
                return;
            }
        }
        if (root.right != null){
            //右子树不为空,进行递归拼接
            tmp.append("(");
            tree2strChild(root.right,tmp);
            tmp.append(")");
        }else {
            //右子树为空,根据要求不进行拼接,直接返回
            return;
        }
    }
}